package cn.sytton.taffe.job.entity;

import cn.sytton.taffe.framework.base.entity.BaseUpdatedEntity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import cn.sytton.taffe.framework.validation.Field;
import cn.sytton.taffe.framework.validation.NotDuplicate;

import javax.validation.constraints.*;

/**
 * 定时任务entity sys_job
 *
 * @author skyrock
 */
@Schema(description = "定时任务")
@EqualsAndHashCode(callSuper = true)
@Data
@NoArgsConstructor
@AllArgsConstructor
@NotDuplicate(value = {
        @Field(name = {"jobName"}, message = "任务名称[ %s ]已存在")},
        excludeByField="jobId")
@TableName("sys_job")
public class JobEntity extends BaseUpdatedEntity {

    @Schema(description = "任务ID")
    @TableId(type = IdType.ASSIGN_ID)
    private String jobId;    // 任务ID 

    @Schema(description = "任务名称")
    @NotNull(message = "任务名称不能为空")
    private String jobName;    // 任务名称 

    @Schema(description = "任务组名")
    private String jobGroup =  "DEFAULT";    // 任务组名

    @Schema(description = "调用目标beanId")
    private String invokeTarget;    // 调用目标beanId 

    @Schema(description = "cron执行表达式")
    private String cronExpression;    // cron执行表达式 

    @Schema(description = "计划执行错误策略（1立即执行 2执行一次 3放弃执行）")
    private String misfirePolicy =  "3";    // 计划执行错误策略（1立即执行 2执行一次 3放弃执行）

    @Schema(description = "是否并发执行（1允许 0禁止）")
    private Integer concurrent =  0;    // 是否并发执行（1允许 0禁止）

    @Schema(description = "状态（1正常 0暂停）")
    private Integer status =  1;    // 状态（1正常 0暂停） 

    @Schema(description = "备注信息")
    private String remark;    // 备注信息 

    //-----以下是关联属性-----
}
